<?php

abstract class Einwohner
{
	private $einkommen;
	private $name;
	public function __construct($einkommen, $name)
	{
		if ($einkommen > 0) {
			$this->einkommen = $einkommen;
		} else {
			$this->einkommen = 0;
		}

		$this->name = $name;
	}

	public abstract function zuVersteuerndesEinkommen();

	public function steuer()
	{
		$steuerwert = floor($this->zuVersteuerndesEinkommen() * 0.1);
		if ($steuerwert < 1) {
			return 1;
		}
		return $steuerwert;
	}

	public function setEinkommen($einkommen)
	{
		if ($einkommen > 0) {
			$this->einkommen = $einkommen;
		}
	}

	public function getEinkommen()
	{
		return $this->einkommen;
	}

	public function getName()
	{
		return $this->name;
	}
}

class Adel extends Einwohner {

	public function zuVersteuerndesEinkommen()
	{
		return parent::getEinkommen();
	}

	public function steuer()
	{
		$steuer = parent::steuer();
		if ($steuer < 20) {
			return 20;
		}
		return $steuer;
	}
}

class Koenig extends Einwohner {

	public function zuVersteuerndesEinkommen()
	{
		return 0;
	}

	public function steuer()
	{
		return 0;
	}
}

class Bauer extends Einwohner {

	public function zuVersteuerndesEinkommen()
	{
		return parent::getEinkommen();
	}
}


class Leibeigener extends Bauer {

	public function zuVersteuerndesEinkommen()
	{
		$einkommen = parent::getEinkommen();
		if ($einkommen >= 10) {
			return $einkommen - 10;
		}
		return 0;
	}
}